// 路由的拦截器，处理锁状态
import {getLockStatus, setLockStatus} from "../controller/status";
import ws from 'nodejs-websocket'

const server = ws.createServer().listen(5000)

export function interceptor ({func, isNeedLock = true}) {
  return async (req, res) => {
    // 如果需要上锁
    if (isNeedLock) {
      const status = await getLockStatus()
      // 如果没上锁
      if (!status.isLock) {
        // 先上锁
        await setLockStatus(true)
        // 再执行操作
        let result = await func(req, res)
        // 执行完操作再解锁
        await setLockStatus(false)
        // result 是执行结果，如果执行成功，发布消息到客户端
        result && server.connections.forEach(function(conn) {
          conn.sendText(JSON.stringify({
            isRefresh: true
          }));
        })
        // 如果上锁了
      } else {
        // 直接返回 告知目前已上锁
        res.send({
          code: 500,
          data: false,
          message: '当前有用户正在编辑，请稍后再试！'
        })
      }
      // 如果不需要上锁
    } else {
      // 直接执行操作
      await func(req, res)
    }
  }
}
